home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / unixSyscall / RCS / open.c,v < prev    next >
Text File  |  1991-11-27  |  6KB  |  281 lines

  1. head     1.7;
  2. branch   ;
  3. access   ;
  4. symbols  sprited:1.7.1;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.7
  10. date     88.11.03.08.42.16;  author ouster;  state Exp;
  11. branches 1.7.1.1;
  12. next     1.6;
  13.  
  14. 1.6
  15. date     88.11.02.16.19.13;  author ouster;  state Exp;
  16. branches ;
  17. next     1.5;
  18.  
  19. 1.5
  20. date     88.09.30.08.35.30;  author brent;  state Exp;
  21. branches ;
  22. next     1.4;
  23.  
  24. 1.4
  25. date     88.07.29.17.39.09;  author ouster;  state Exp;
  26. branches ;
  27. next     1.3;
  28.  
  29. 1.3
  30. date     88.06.29.09.15.27;  author ouster;  state Exp;
  31. branches ;
  32. next     1.2;
  33.  
  34. 1.2
  35. date     88.06.21.11.36.53;  author ouster;  state Exp;
  36. branches ;
  37. next     1.1;
  38.  
  39. 1.1
  40. date     88.06.19.14.31.39;  author ouster;  state Exp;
  41. branches ;
  42. next     ;
  43.  
  44. 1.7.1.1
  45. date     91.11.27.13.12.38;  author kupfer;  state Exp;
  46. branches ;
  47. next     ;
  48.  
  49.  
  50. desc
  51. @@
  52.  
  53.  
  54. 1.7
  55. log
  56. @Bug in the change I made yesterday.
  57. @
  58. text
  59. @/* 
  60.  * open.c --
  61.  *
  62.  *    Procedure to map from Unix open system call to Sprite.
  63.  *
  64.  * Copyright (C) 1986 Regents of the University of California
  65.  * All rights reserved.
  66.  */
  67.  
  68. #ifndef lint
  69. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/open.c,v 1.6 88/11/02 16:19:13 ouster Exp $ SPRITE (Berkeley)";
  70. #endif not lint
  71.  
  72. #include <sprite.h>
  73. #include <stdio.h>
  74. #include <fs.h>
  75. #include "compatInt.h"
  76. #include <sys/file.h>
  77. #include <errno.h>
  78. #include <status.h>
  79.  
  80.  
  81. /*
  82.  *----------------------------------------------------------------------
  83.  *
  84.  * open --
  85.  *
  86.  *    Procedure to map from Unix open system call to Sprite Fs_Open.
  87.  *    Mostly this has to map the usageFlags argument
  88.  *
  89.  * Results:
  90.  *    UNIX_ERROR is returned upon error, with the actual error code
  91.  *    stored in errno.  A file descriptor is returned upon success.
  92.  *
  93.  * Side effects:
  94.  *    Opening a file sets up state in the filesystem until the file is
  95.  *    closed.  
  96.  *
  97.  *----------------------------------------------------------------------
  98.  */
  99.  
  100.     /* VARARGS2 */
  101. int
  102. open(pathName, unixFlags, permissions)
  103.     char *pathName;        /* The name of the file to open */
  104.     register int unixFlags;    /* O_RDONLY O_WRONLY O_RDWR O_NDELAY
  105.                  * O_APPEND O_CREAT O_TRUNC O_EXCL */
  106.     int permissions;        /* Permission mask to use on creation */
  107. {
  108.     int streamId;        /* place to hold stream id allocated by
  109.                  * Fs_Open */
  110.     ReturnStatus status;    /* result returned by Fs_Open */
  111.     register int useFlags = 0;    /* Sprite version of flags */
  112.  
  113.     /*
  114.      * Convert unixFlags to FS_READ, etc.
  115.      */
  116.      
  117.     if (unixFlags & FASYNC) {
  118.     fprintf(stderr, "open - FASYNC not supported\n");
  119.     errno = EINVAL;
  120.     return(UNIX_ERROR);
  121.     }
  122.     if (unixFlags & O_RDWR) {
  123.     useFlags |= FS_READ|FS_WRITE;
  124.     } else if (unixFlags & O_WRONLY) {
  125.     useFlags |= FS_WRITE;
  126.     } else {
  127.     useFlags |= FS_READ;
  128.     }
  129.     if (unixFlags & FNDELAY) {
  130.     useFlags |= FS_NON_BLOCKING;
  131.     }
  132.     if (unixFlags & FAPPEND) {
  133.     useFlags |= FS_APPEND;
  134.     }
  135.     if (unixFlags & FTRUNC) {
  136.     useFlags |= FS_TRUNC;
  137.     }
  138.     if (unixFlags & FEXCL) {
  139.     useFlags |= FS_EXCLUSIVE;
  140.     }
  141.     if (unixFlags & O_MASTER) {
  142.     useFlags |= FS_PDEV_MASTER;
  143.     }
  144.     if (unixFlags & O_PFS_MASTER) {
  145.     useFlags |= FS_PFS_MASTER;
  146.     }
  147.     if (unixFlags & FCREAT) {
  148.     useFlags |= FS_CREATE;
  149.     }
  150.  
  151.     status = Fs_Open(pathName, useFlags, permissions, &streamId);
  152.     if (status != SUCCESS) {
  153.     errno = Compat_MapCode(status);
  154.     return(UNIX_ERROR);
  155.     } else {
  156.     return(streamId);
  157.     }
  158. }
  159. @
  160.  
  161.  
  162. 1.7.1.1
  163. log
  164. @Initial branch for Sprite server.
  165. @
  166. text
  167. @d11 1
  168. a11 1
  169. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/open.c,v 1.7 88/11/03 08:42:16 ouster Exp $ SPRITE (Berkeley)";
  170. @
  171.  
  172.  
  173. 1.6
  174. log
  175. @I don't understand why there were TWO calls to Fs_Open.  This
  176. was causing problems for mode O_CREAT|O_EXCL (the open wasn't
  177. failing if the file already existed).  So I took out the first
  178. call.
  179. @
  180. text
  181. @d11 1
  182. a11 1
  183. static char rcsid[] = "$Header: open.c,v 1.5 88/09/30 08:35:30 brent Exp $ SPRITE (Berkeley)";
  184. d89 1
  185. a89 1
  186.     if (unixFlags & O_EXCL) {
  187. @
  188.  
  189.  
  190. 1.5
  191. log
  192. @Added O_PFS_MASTER flag for pseudo-filesystems
  193. @
  194. text
  195. @d11 1
  196. a11 1
  197. static char rcsid[] = "$Header: open.c,v 1.4 88/07/29 17:39:09 ouster Exp $ SPRITE (Berkeley)";
  198. d89 3
  199. a93 4
  200.     if ((status == FS_FILE_NOT_FOUND) && (unixFlags & FCREAT)) {
  201.     useFlags |= FS_CREATE;
  202.     status = Fs_Open (pathName, useFlags, permissions, &streamId);
  203.     }
  204. @
  205.  
  206.  
  207. 1.4
  208. log
  209. @Lint.
  210. @
  211. text
  212. @d11 1
  213. a11 1
  214. static char rcsid[] = "$Header: open.c,v 1.3 88/06/29 09:15:27 ouster Exp $ SPRITE (Berkeley)";
  215. d84 4
  216. a87 1
  217.     useFlags |= FS_NEW_MASTER;
  218. @
  219.  
  220.  
  221. 1.3
  222. log
  223. @Support pseudo-devices, fix bug in handling O_WRONLY.
  224. @
  225. text
  226. @d11 1
  227. a11 1
  228. static char rcsid[] = "$Header: open.c,v 1.2 88/06/21 11:36:53 ouster Exp $ SPRITE (Berkeley)";
  229. d42 1
  230. @
  231.  
  232.  
  233. 1.2
  234. log
  235. @Must include status.h.
  236. @
  237. text
  238. @d11 1
  239. a11 1
  240. static char rcsid[] = "$Header: open.c,v 1.1 88/06/19 14:31:39 ouster Exp $ SPRITE (Berkeley)";
  241. d55 1
  242. a55 5
  243.      * Convert unixFlags to FS_READ, etc.  Because O_RDONLY == 0, and
  244.      * O_WRONLY == 1, and O_RDWR == 2, you can add 1 to the flags to
  245.      * get the low order bit set when you need reading, and the second
  246.      * bit set when you need writing.  The next flag up is 0x4, so it
  247.      * doesn't get affected.  Isn't this great...
  248. d57 1
  249. a57 1
  250.     unixFlags += 1;
  251. d63 5
  252. a67 1
  253.     if (unixFlags & FREAD) {
  254. a69 3
  255.     if (unixFlags & FWRITE) {
  256.     useFlags |= FS_WRITE;
  257.     }
  258. d82 2
  259. a83 2
  260.     if (unixFlags & FREAD) {
  261.     useFlags |= FS_READ;
  262. @
  263.  
  264.  
  265. 1.1
  266. log
  267. @Initial revision
  268. @
  269. text
  270. @d11 1
  271. a11 1
  272. static char rcsid[] = "$Header: open.c,v 1.7 87/09/26 04:56:45 deboor Exp $ SPRITE (Berkeley)";
  273. d14 1
  274. a14 1
  275. #include "sprite.h"
  276. d16 1
  277. a16 1
  278. #include "fs.h"
  279. d20 1
  280. @
  281.